import 'package:flutter/material.dart';

class Example_07 extends StatefulWidget {
  const Example_07({super.key});

  @override
  State<Example_07> createState() => _Example_07State();
}

class _Example_07State extends State<Example_07> with SingleTickerProviderStateMixin {
  
  late AnimationController _animationController; 
  late Animation animation;

  @override  
  void initState() {  
    super.initState();  

    _animationController = AnimationController(  
      duration: const Duration(seconds: 3), // 动画持续时间  
      vsync: this, // 与 State 对象同步  
    );  

    // 这里添加动画曲线类型
    // animation = CurvedAnimation(
    //   parent: _animationController, 
    //   curve: Curves.ease
    // );

    // 让动画在两个值之间变化：这里演示的是颜色渐变
    animation = ColorTween(begin: Colors.red, end: Colors.blue).
      animate(_animationController);

    // 你可以在这里添加监听器或启动动画  
    _animationController.addListener(() {  
      // 不更新任何状态值，就代表更新屏幕
      setState(() {});
      // 动画值变化时的回调  
      print(_animationController);
    } as VoidCallback);  

    // 添加动画执行状态监听
    // _animationController.addStatusListener((status) {
    //   if(status == AnimationStatus.completed) {
    //     _animationController.reverse(from: 1.0);
    //   }else if(status == AnimationStatus.dismissed) {
    //     _animationController.forward();
    //   }
    // });
  
    // 你可以在这里启动动画  
    _animationController.forward();  
    // _animationController.reverse(from: 1.0);
  }

  @override  
  void dispose() {  
    _animationController.dispose(); // 在 State 对象被销毁时释放资源  
    super.dispose();  
  }  

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // backgroundColor: Colors.green.withOpacity(_animationController.value),
      backgroundColor: animation.value,
      appBar: AppBar(
        title: Text('自定义动画'),
        backgroundColor: Colors.deepOrange,
      ),
      body: Container(
        alignment:Alignment.topCenter,
        child: Text(
          '自定义动画',
          style: TextStyle(
            color: Colors.white,
            fontSize: 16 + _animationController.value * 20
          ),
        )
      )
    );
  }
}